{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Interactive NGSolve Tutorial\n",
    "====\n",
    "\n",
    "\n",
    "Whetting the appetite \n",
    "---\n",
    "\n",
    "* [Poisson equation](wta/poisson.ipynb)\n",
    "* [Adaptivity](wta/adaptivity.ipynb)\n",
    "* [Maxwell equations](wta/coil.ipynb)\n",
    "* [Navier Stokes](wta/navierstokes.ipynb)\n",
    "* [Non-linear elasticity](wta/elasticity.ipynb)\n",
    "* [3D Elasticity](wta/elasticity3D.ipynb)\n",
    "* [Rotating domains](wta/rotating.ipynb)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Getting started\n",
    "----\n",
    "* [1.1](unit-1.1-poisson/poisson.ipynb) Poisson equation\n",
    "* [1.2](unit-1.2-coefficient/coefficientfunction.ipynb) CoefficientFunctions\n",
    "* [1.3](unit-1.3-dirichlet/dirichlet.ipynb) Dirichlet boundary conditions\n",
    "* [1.4](unit-1.4-staticcond/staticcond.ipynb) Static condensation\n",
    "* [1.5](unit-1.5-subdomains/subdomains.ipynb) Spaces and forms on sub-domains\n",
    "* [1.6](unit-1.6-adaptivity/adaptivity.ipynb) Error estimation and refinement\n",
    "* [1.7](unit-1.7-helmholtz/helmholtz.ipynb)  Helmholtz equation\n",
    "  * [1.7.1](unit-1.7-helmholtz/pml.ipynb) Perfectly matched layers (PML)\n",
    "* [1.8](unit-1.8-meshtopology/meshtopology.ipynb) Exploring the mesh topology"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Advanced topics\n",
    "----\n",
    "* 2.1 Preconditioning\n",
    "    * [2.1.1](unit-2.1.1-preconditioners/preconditioner.ipynb) Available preconditioners and solvers\n",
    "    * [2.1.2](unit-2.1.2-blockjacobi/blockjacobi.ipynb) Programming preconditioners\n",
    "    * [2.1.3](unit-2.1.3-multigrid/multigrid.ipynb) Multigrid preconditioners\n",
    "    * [2.1.4](unit-2.1.4-bddc/bddc.ipynb) p-version BDDC preconditioner\n",
    "    * [2.1.5](unit-2.1.5-amg/amg.ipynb) AMG preconditioner\n",
    "* [2.2](unit-2.2-eigenvalues/pinvit.ipynb) Eigenvalue solver     \n",
    "* [2.3](unit-2.3-hcurlhdiv/hcurlhdiv.ipynb) $H(curl)$ and $H(div)$ finite element spaces\n",
    "* [2.4](unit-2.4-Maxwell/Maxwell.ipynb) Solving Maxwell equations\n",
    "   * [2.4.1](unit-2.4-Maxwell/Maxwellevp.ipynb) Maxwell eigenvalue problem \n",
    "* [2.5](unit-2.5-mixed/mixed.ipynb) Mixed formulations for second order equations\n",
    "* [2.6](unit-2.6-stokes/stokes.ipynb) Stokes equation\n",
    "* [2.7](unit-2.7-hybrid/hybrid.ipynb) Facet-spaces and hybrid methods\n",
    "* [2.8](unit-2.8-DG/DG.ipynb) (Hybrid) Discontinuous Galerkin methods \n",
    "* [2.9](unit-2.9-fourthorder/fourthorder.ipynb) Fourth order equations - Kirchhoff plates\n",
    "* [2.10](unit-2.10-dualbasis/dualbasis.ipynb) Dual basis functions\n",
    "* [2.11](unit-2.11-matrixfree/matrixfree.ipynb) Matrix-free operator application\n",
    "* [2.12](unit-2.12-periodicity/periodicity.ipynb) Periodic Spaces\n",
    "* [2.13](unit-2.13-interfaces/interfaceresistivity.ipynb) Interface resistivity\n",
    "* [2.14](unit-2.14-globalspaces/planewavecoupling.ipynb) Global Spaces (plane waves)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Time-dependent and non-linear problems\n",
    "----\n",
    "* [3.1](unit-3.1-parabolic/parabolic.ipynb) Time-stepping methods for parabolic equations\n",
    "* [3.2](unit-3.2-navierstokes/navierstokes.ipynb) Time-dependent Navier-Stokes equation\n",
    "* [3.3](unit-3.3-nonlinear/nonlinear.ipynb) Non-linear equations\n",
    "* [3.4](unit-3.4-nonlmin/nonlmin.ipynb) Non-linear minimization problems\n",
    "* 3.5 Operator applications for DG-methods\n",
    "    * [3.5.1](unit-3.5.1-dgapply/dgapply-scalar.ipynb) DG-method for convection (operator application)\n",
    "    * [3.5.2](unit-3.5.2-wavedg/wavedg.ipynb) DG-method for acoustic wave propagation (tuned operator applications) \n",
    "* [3.6](unit-3.6-surfacehdg/surfacehdg.ipynb) Scalar HDG on surface\n",
    "* [3.7](unit-3.7-opsplit/opsplit.ipynb)  DG/HDG operator splitting methods\n",
    "* [3.8](unit-3.8-simplehyp/shallow2D.ipynb) DG for hyperbolic conservation laws \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Geometric modeling and mesh generation\n",
    "----\n",
    "\n",
    "* [4.1.1](unit-4.1.1-geom2d/geom2d.ipynb) Spline geometries in 2D\n",
    "* [4.1.2](unit-4.1.2-csg2d/csg2d.ipynb) CSG geometries in 2D\n",
    "* [4.2](unit-4.2-csg/csg.ipynb) CSG geometries in 3D\n",
    "* [4.3](unit-4.3-manualmesh/manualmeshing.ipynb) Working with meshes\n",
    "* [4.4](unit-4.4-occ/occ.ipynb) OpenCascade geometries (NEW)\n",
    "    * [4.4.1](unit-4.4-occ/bottle.ipynb) OpenCascade bottle tutorial\n",
    "    * [4.4.2](unit-4.4-occ/workplane.ipynb) Workplanes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "MPI-parallel NGSolve and Accelerator Support\n",
    "----\n",
    "\n",
    "* [5.1](unit-5a.1-mpi/poisson_mpi.ipynb) Poisson Equation in Parallel\n",
    "* [5.2](unit-5a.2-pardofs/pardofs.ipynb) Parallel Dofs and Vector-types\n",
    "* [5.3.1](unit-5a.3-petsc/petsc.ipynb) Using PETSc\n",
    "* [5.3.2](unit-5a.3-petsc/petsc_interface.ipynb) NGSolve-PETSc interface<br>\n",
    " More on PETSc coupling is available by Stefano Zampini and Umberto Zerbinati from https://ngspetsc.readthedocs.io/en/latest/ngsPETSc.html \n",
    "\n",
    "### NGSolve with CUDA (NEW)\n",
    "* [5.5.1](unit-5.5-cuda/poisson_cuda.ipynb) Poisson Equation using CUDA\n",
    "* [5.5.2](unit-5.5-cuda/wave_cuda.ipynb) Explicit time-stepping for the wave equation\n",
    "* [5.5.3](unit-5.5-cuda/EulerEquations.ipynb) Solving non-linear conservation laws\n",
    "\n",
    "some more [MPI tutorials](historic/historicMPI.ipynb)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Various Topics\n",
    "---\n",
    "\n",
    "* 6.1 Plates and Shells\n",
    "    * [6.1.1](unit-6.1.1-surfacemeshes/surface_meshes.ipynb) Surface meshes\n",
    "    * [6.1.2](unit-6.1.2-surfacepde/surface_pdes.ipynb) Surface PDE examples\n",
    "    * [6.1.3](unit-6.1.3-rmplate/Reissner_Mindlin_plate.ipynb) Reissner--Mindlin plate elements\n",
    "    * [6.1.4](unit-6.1.4-shells/shell.ipynb) Naghdi/Koiter shells\n",
    "    \n",
    "* [6.2](unit-6.2-contact/contact.ipynb) Contact Problems\n",
    "* [6.3](unit-6.3-plasticity/plasticity.ipynb) Elasto-plasticity"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Shape- and Topology Optimization\n",
    "Peter Gangl and Kevin Sturm\n",
    "\n",
    "  - [7.1](unit-7-optimization/01_Shape_Derivative_Levelset.ipynb) Shape Derivative Levelset  \n",
    "  - [7.2](unit-7-optimization/02_Shape_Derivative_Laplace.ipynb) Shape Derivative Laplace\n",
    "  - [7.3](unit-7-optimization/03_Shape_Derivative_Laplace_SemiAuto.ipynb) Shape Derivative SemiAuto\n",
    "  - [7.4](unit-7-optimization/03a_Shape_Derivative_Laplace_SemiAuto.ipynb) Shape Derivative Laplace SemiAuto\n",
    "  - [7.5](unit-7-optimization/03b_Shape_Derivative_Laplace_FullyAuto.ipynb) Shape Derivative Laplace FullyAuto\n",
    "\n",
    "\n",
    "  - [7.6](unit-7-optimization/04_Topological_Derivative_Levelset.ipynb) Topological Derivative Levelset\n",
    "  - [7.7](unit-7-optimization/05_Topological_Derivative_Transmission.ipynb) Topological Derivative Transmission\n",
    "\n",
    "\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "## Unfitted Finite Elements\n",
    "C. Lehrenfeld and the [ngsxfem](https://github.com/ngsxfem/ngsxfem/) authors\n",
    "\n",
    "These units require the Add-on [ngsxfem](https://github.com/ngsxfem/ngsxfem/) to be installed.\n",
    "There are further ngsxfem-tutorials [here](https://github.com/ngsxfem/ngsxfem-jupyter/).\n",
    "\n",
    "  - [8.1](unit-8.1-basics/basics.ipynb) Fundamental concepts\n",
    "  - [8.2](unit-8.2-intlset/intlset.ipynb) Integration on level set domains\n",
    "  - [8.3](unit-8.3-cutfem/cutfem.ipynb) Unfitted FEM PDE discretizations\n",
    "  - [8.4](unit-8.4-spacetime_fitted/spacetime_fitted.ipynb) Space-time discretizations on fitted geometry\n",
    "  - [8.5](unit-8.5-spacetime_unfitted/spacetime_unfitted.ipynb) Space-time discretizations on unfitted geometries\n",
    "  - [8.6](unit-8.6-mlset_basic/mlset_basic.ipynb) Integration on domains described by multiple level sets\n",
    "  - [8.7](unit-8.7-mlset_pde/mlset_pde.ipynb) Unfitted FEM for domains described by multiple level sets\n",
    "  - [8.8](unit-8.8-aggregation/aggregation.ipynb) Cell and basis aggregation in `ngsxfem`\n",
    "  - [8.9](unit-8.9-unfmixed/unfmixed.ipynb) Unfitted mixed FEM with $H(\\text{div})$ elements  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Extending by C++ programming\n",
    "\n",
    "\n",
    "* [9.1](unit-9.1-C++FE/CppExtension.ipynb) Implementation of Finite Elements\n",
    "* [9.2](unit-9.2-C++Assemble/cppassembling.ipynb) Implement our own system assembling\n",
    "* [9.3](unit-9.3-highorder/highorder.ipynb) High Order Finite Elements\n",
    "   \n",
    "   "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## NGSolve and ...\n",
    "\n",
    "* [10.1](unit-10.1-ngspice/NGSpiceNGSolve.ipynb) Coupling with NGSpice\n",
    "* [10.2](unit-10.2-tensorflow/TensorFlowNGSolve.ipynb) Coupling with TensorFlow"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Appendix\n",
    "\n",
    "* [Parallel computing using TaskManager](appendix-taskmanager/taskmanager.ipynb) \n",
    "* [Webgui programming and internal features](appendix-webgui/webgui-internal.ipynb)\n",
    "* [VTK - Output](appendix-vtk/vtk.ipynb)\n",
    "* [Common pitfalls](appendix-pitfalls/pitfalls.ipynb)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
